package com.chj.chuji.tijie05;

//https://www.nowcoder.com/questionTerminal/196141ecd6eb401da3111748d30e9141?toCommentId=163847
public class LastNum {

	public static int deleteOddnum(int num) {
		int count = 1;
		while (num > (1 << count)) {
			count++;
		}
		System.out.println("count: " + (1 << count));
		System.out.println("count: " + (1 << count - 1));
		return (int) (1 << count - 1) - 1;
	}

	public static void main(String[] args) {
		System.out.println(deleteOddnum(500));
//		Scanner sc = new Scanner(System.in);
//		while (sc.hasNext()) {
//			int num = sc.nextInt();
		int num = 500;
		int num1 = 1;
		while (num1 < num) {
			num1 = num1 << 1;
			System.out.println(Integer.toBinaryString(num1));
		}
		System.out.println(num1);
		num1 = (num1 >> 1) - 1;
		System.out.println(num1);
		System.out.println(Integer.toBinaryString(num1));
//		}
		int a = 10;
		System.out.println(Integer.toBinaryString(a));
		a = a << 1;
		System.out.println(a);
		System.out.println(Integer.toBinaryString(a));
		a = 1 << 8;
		System.out.println(a);
		System.out.println(Integer.toBinaryString(a));
	}
	// 特殊思路，每次删除所在数组位置的二进制最右端为0的元素。如0（0）2（10）4（100）
	// 剩余的元素1（01）3（11）5（101）下一次其位置变成了之前位置左移一次后的
	// 1（1） 3（10） 5(10) 然后继续按之前规则删除最右端为0的元素。故原始序列中，谁的
	// 二进制下从右往左数，1最多，则最后删除，因每次删除移位后，最右端仍然为1，会保留
}
